package cn.magic.system.service.impl;

import cn.magic.org.domain.Department;
import cn.magic.system.domain.Menu;
import cn.magic.system.mapper.MenuMapper;
import cn.magic.system.service.IMenuService;
import cn.magic.basic.service.impl.BaseServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author pc
 * @since 2022-07-11
 */
@Service
public class MenuServiceImpl extends BaseServiceImpl<Menu> implements IMenuService {

    @Autowired
    private MenuMapper menuMapper;

    /**
    * @Title: tree
    * @Description: 获取上级菜单数据
    * @Author: Mr.pc
    * @Version: 1.0
    * @Date:  2022/7/11 18:16
    * @Parameters: []
    * @Return java.util.List<cn.magic.system.domain.Menu>
    */
    @Override
    public List<Menu> tree() {
        // 一次性查询出全部数据
        List<Menu> menus = menuMapper.loadAll();
        // 创建一个集合对象，用于最终存放排列完成的树数据
        List<Menu> menuTree = new ArrayList<Menu>();
        // 用集合数据装换为map。消除时间复杂问题
        HashMap<Long, Menu> menuMap = new HashMap<>();
        for (Menu menu : menus) {
            // 将排列完成的树数据赋值给新集合，通过key ，value
            menuMap.put(menu.getId(),menu);
        }
        // 在所有数据中找到一级路径
        for (Menu menuTmp : menus) {
            if (menuTmp.getParentId()== null) {
                // 如果没有父级id，那么表示一级数据.将数据添加到新集合deptTree中
                menuTree.add(menuTmp);
            }else {
                // 从map集合中获取父类对象，将自己添加到父类对象的children集合中
                Menu menu = menuMap.get(menuTmp.getParentId());
                // 判断department是否为null
                if (menu != null){
                    menu.getChildren().add(menuTmp);
                }
            }

        }
        return menuTree;

    }



}
